<?php
/**
 * Klasse für den Zugriffs auf die Spieltage
 * @author Norman Krüger
 */
  require_once 'toolkit/settings.php';
 require_once  SERVERPATH . '/classes/DB.php';
 require_once  SERVERPATH . '/classes/Liga.php';   
 require_once  SERVERPATH . '/classes/Team.php';  
 
 class Spieltag{
 	
 	public $mysql;
 	public $spieldatum;
 	public $heim_id;
 	public $auswaerts_id;
 	public $ort;
 	public $liga_id;
 	public $spieltag_nr;
 	public $name_Team;
 	public $name_liga;
 	public $spiel_id;
 	public $begegnung;  // Array mit den Daten eines Spieles
 	public $spieltage;
 	 	
 	
 	function __construct(){
 		// Aufbau der Verbindung zur Datenbank
 		$this->mysql = 	new DB();
 	} 
 	
 	/**
 	 * Aufruf eines Spieltages
 	 * @param int SpieltagID
 	 * @param int LigaID
 	 */
 	function getPlayday($nr, $liga){
 		// SQL-Statement
 		$query = 	"SELECT id, UNIX_TIMESTAMP(datum), heim_id, auswaerts_id, ort, liga_id, spieltag_nr
					FROM stedano_spielplan
					WHERE spieltag_nr = ? AND liga_id = ?";
		
		// Prepared Statement erzeugen
		if($stmt = $this->mysql->conn->prepare($query)) {		
			
			$stmt->bind_param('ii', $nr, $liga);				// Parameter in das Statement �bernehmen
			$stmt->execute();							// Statement abfeuern
			// Statement vorbereiten
			$stmt->bind_result(		$this->spiel_id,
									$this->spieldatum, 
									$this->heim_id, 
									$this->auswaerts_id,
									$this->ort,
									$this->liga_id,
									$this->spieltag_nr);
			
			while($stmt->fetch()){						
				$tippen = true;
				// Tippen bis 15 min vor Spielbeginn
				if(($this->spieldatum - time()) <= (15*60)){
					$tippen = false;
				}
				/*
				 * Spieltagdetails in Array abgelegt	
				 */ 				
				$this->begegnung[] = array(	
								'spiel_id' => $this->spiel_id,
								'datum' => $this->spieldatum, 
								'heim_id' => $this->heim_id, 
								'auswaerts_id' => $this->auswaerts_id,
								'ort' => $this->ort,
								'liga_id' => $this->liga_id,
								'spieltag_nr' => $this->spieltag_nr,
								'tippen' => $tippen);
			
			}
			$stmt->close();							// Statement killen	
		}else{
			new Error("Datenbankfehler<br/>Spieltag kann nicht ermittelt werden",true);
		}
 	}
 	
 	/**
 	 * Methode zum Anlegen eines Spieltags
 	 * @param string Datum und Uhrzeit des Spieltags
 	 * @param int ID der Heimmannschaft
 	 * @param int ID der Auswärtsmannschaft
 	 * @param string Austragungsort
 	 * @param int ID der Liga
 	 * @param int Spieltagsnummer
 	 */
 	function insertSpiel($datum, $heim_id, $auswaerts_id, $ort, $liga_id, $spieltag_nr){
 		$liga = new Liga();			
 		$team = new Team();
 		if(!$liga->getLiga($liga_id)){		// Prüfung, ob die Liga existiert					
 			echo "Liga ungültig!"; 			
 		}else if(!($team->checkTeam($heim_id))){	// Prüfung, ob die Heimteam existiert
 			echo "Heimteam ungültig!";
 		}elseif(!$team->checkTeam($heim_id)){	// Prüfung, ob die Auswärtsteam existiert
 			echo "Auswärtsteam ungültig!";
 		}else{ 		
 			$query = "INSERT INTO stedano_spielplan (datum, heim_id, auswaerts_id, ort, liga_id, spieltag_nr)
 				VALUES (?,?,?,?,?,?)";
 			if($stmt = $this->mysql->conn->prepare($query)){
 				
 				$stmt->bind_param('siisii', $datum, $heim_id, $auswaerts_id, $ort, $liga_id, $spieltag_nr);
				if(!$stmt->execute()){
					// Statement schließen
					$stmt->close(); 
					// Fehlermeldung ausgeben			
					new Error("Anlegen des Spiels nicht möglich!",true);
				}
				else{
					// Statement schließen
					$stmt->close(); 
				}
 			}
 			else{
 				// Fehlermeldung ausgeben
 				new Error("Datenbankfehler<br/>Anlegen des Spiels nicht möglich");
 			}
 			
 		}
	}
	 
	/**
 	 * Methode zum verändern eines Spieltags
 	 * @param int ID des Spiels
 	 * @param string Datum und Uhrzeit des Spieltags
 	 * @param int ID der Heimmannschaft
 	 * @param int ID der Auswärtsmannschaft
 	 * @param string Austragungsort
 	 */
	function updateSpiel($spielID, $datum, $heim_id, $auswaerts_id, $ort){
		$liga = new Liga();			
 		$team = new Team();
		if(!($team->checkTeam($heim_id))){	// Prüfung, ob die Heimteam existiert
 			echo "Heimteam ungültig!";
 		}elseif(!$team->checkTeam($heim_id)){	// Prüfung, ob die Auswärtsteam existiert
 			echo "Auswärtsteam ungültig!";
 		}else{ 	
			$query = "UPDATE stedano_spielplan 
 						SET datum = ?, heim_id = ?, auswaerts_id = ?, ort = ? 
 						WHERE id = ?";
 			if($stmt = $this->mysql->conn->prepare($query)){
 				
 				$stmt->bind_param('siisi', $datum, $heim_id, $auswaerts_id, $ort, $spielID);
				if(!$stmt->execute()){	 			
					new Error("Ändern des Spiels nicht möglich!",true);
				}
 			}
 			else{
 				new Error("Datenbankfehler<br/>Ändern des Spiels nicht möglich", true);
 			}
		}					
	}
	
	/**
	 * Diese Methode erstellt ein Array mit allen Spieltagsnummer die schon für eine Liga vorhanden sind.
	 * @param ID der Liga
	 */
	function getPlaydayForLiga($liga){	
 		$query = 	"SELECT DISTINCT spieltag_nr
					FROM stedano_spielplan
					WHERE liga_id = ? 
					ORDER BY spieltag_nr ASC";
					
		
		if($stmt = $this->mysql->conn->prepare($query)) {		// Prepared Statement vorbereiten
			
			$stmt->bind_param('i', $liga);				// Parameter in das Statement �bernehmen
			$stmt->execute();							// Statement abfeuern
			// Statement vorbereiten
			$stmt->bind_result(	$this->spieltag_nr);
			
			while($stmt->fetch()){						
									
				// Array mit allen Spieltagsnummer wird befüllt					
				$this->spieltage[] = 	
								$this->spieltag_nr;
		
			}
			$stmt->close();							// Statement killen	 
		}else{
			new Error("Datenbankfehler<br/>Spieltage können nicht ermittelt werden",true);
		}
 	}
 	
 	/**
 	 * Mehtode liefert den aktuellen Spieltag
 	 * Ermittlung wird mit Datumvergleichen realisiert
	 * Der nächste Spieltag ist immer der zeitlich nächste
 	 * (Vergangenheit und Zukunft1)
 	 * @param int LigaID
 	 */
 	function getActualPlayday($liga){	
 		$query = 	"SELECT UNIX_TIMESTAMP(datum), spieltag_nr
					FROM stedano_spielplan
					WHERE liga_id = ?";					
		
		if($stmt = $this->mysql->conn->prepare($query)) {		// Prepared Statement vorbereiten
			
			$stmt->bind_param('i', $liga);				// Parameter in das Statement �bernehmen
			$stmt->execute();							// Statement abfeuern
			// Statement vorbereiten
			$stmt->bind_result(	$this->spieldatum,	
										$this->spieltag_nr);
			
			$actPlayday = 0;
			$actPlaydayTimeDiff = null;
			while($stmt->fetch()){
					// Zeitdifferenz zu aktuellen Datum berechnen
					$timeDiff = abs($this->spieldatum - time());	
					// Überprüfen ob Zeitdifferenz kürzer als vorherige Werte					
					if($timeDiff < $actPlaydayTimeDiff || $actPlaydayTimeDiff == null){
						// Spieltagnummer setzen wenn Zeitdifferenz kürzer als bisher
						$actPlayday = $this->spieltag_nr;
						$actPlaydayTimeDiff = $timeDiff;
					}
						
			}
			$stmt->close();							// Statement killen	
			// Spieltag zurückgeben
			return $actPlayday;	 
		}else{
			new Error("Datenbankfehler<br/>Akuteller Spieltag kann nicht ermittelt werden",true);
		}
 	}
 	
 	/**
 	 * Methode ermittelt den nächsten einzutragenden Spieltag
 	 * @param LigaID
 	 */
 	function getNextPlaydayToInsert($liga){	
 		$query = 	"SELECT DISTINCT spieltag_nr
					FROM stedano_spielplan
					WHERE liga_id = ?
					ORDER BY spieltag_nr DESC";					
		
		if($stmt = $this->mysql->conn->prepare($query)) {		// Prepared Statement vorbereiten
			
			$stmt->bind_param('i', $liga);				// Parameter in das Statement �bernehmen
			$stmt->execute();							// Statement abfeuern
			// Statement vorbereiten
			
			$stmt->bind_result($this->spieltag_nr);

			if($stmt->fetch()){
				// Spieltag ID des neuen Spieltag wird erstellt
				$insert = $this->spieltag_nr +1;
			}
			else{
				// Wenn noch kein Spieltag vorhanden ist, wird eine "1" für den ersten Spieltag zurückgegeben.
				$insert = 1;
			}
			$stmt->close();							// Statement killen	
			return $insert;	 
		}else{
			new Error("Datenbankfehler<br/>Akuteller Spieltag kann nicht ermittelt werden",true);
		}
 	}
 
}
?>
